#include "io.h"
#include "led_trigger.h"
#include "hal.h"

static void __led_init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    
    RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOA, ENABLE ); 
    
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_OUT;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_8;
    GPIO_Init( GPIOA, &GPIO_InitStructure ); 
    GPIO_SetBits( GPIOA, GPIO_Pin_8 | GPIO_Pin_11 | GPIO_Pin_12 );
}

static void led_on(void)
{
    GPIO_ResetBits( GPIOA, GPIO_Pin_8 );    
}

static void led_off(void)
{
    GPIO_SetBits( GPIOA, GPIO_Pin_8 );  
}

static err_t led_init(void)
{
    struct led_heart_trigger led_heart_trigger;
    
    __led_init();
  
    led_heart_trigger.led_count = 0;
    led_heart_trigger.led_off = led_off;
    led_heart_trigger.led_on = led_on;
    
    return led_heart_trigger_init(&led_heart_trigger);
}
HAL_FUNC_EXPORT(led_init, init the led and its trigger function, 1);